package File;

import java.io.*;

public class FileTest {
	
	public static void main(String[] args) {
		/**一 创建新文件
		 * */
		
		//1)创建新File对象
		File f = new File("D:\\aa.txt");//该句在内存中创建一个对象，其功能尚未确定。使用的是绝对路径
		//2)利用File对象创建新文件
		try {
			f.createNewFile();//建立文件后，file对象将与文件自动建立映射。
		} catch (IOException e) {
			e.printStackTrace();
		}
		File ff = new File("D:\\file1\\ga.txt");//文件路径中有不存在的路径明时，无法创建目标文件
		
		try {
			ff.createNewFile();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		File f2 = new File("aa.txt");
		try {
			f2.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		/**二 打开已有文件
		 * */
		//1) 生成File对象（文件路径名使用已有文件的。）
		File f3 = new File("D:\\file1\\gaga.txt");//该File对象与目标文件建立映射，在内存中代表磁盘上的目标文件。
		//2）利用映射后的File对象，操作目标文件。（前提是：必须先建立了映射。）
		boolean read = f3.canRead();//文件可读性检查。检查运行本程序的用户，对目标文件是否可读；及文件载体是否损坏
		System.out.println(read);
		System.out.println("删除前"+f3.canWrite());
		System.out.println(f3.exists());//该文件是否存在
		//删除文件
		boolean delet = f3.delete();//删除f3关联的文件   问：该句执行后File对象存在吗？目标文件存在吗？
		System.out.println(delet);
		//删除后
		System.out.println("删除后："+f3.exists());
		//再次创建目标文件
		try {
			f3.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(f3.getName());//获得关联的文件名
		System.out.println(f3.getPath());//获得File对象的路径名
		System.out.println(f3.getAbsolutePath());//获得绝对路径
		/**文件改名:
		 * 老File对象.renameTo(新目标File对象)
		 * * 改名条件：1.老File对象已经和文件建立了映射关系；
	     *           2.文件不可读写时，无法改名。
	     *           3.新文件名未占用时才可改名；
	     *           4.该句也可更改目录名，目录中有内容时也可改名。
		 * */
		File f4 = new File("D:\\file1\\hehe.txt");//制作将要改名后的File对象
		f3.renameTo(f4);//原映射的磁盘文件改成目标名
		//文件改为与新File对象重新建立映射，以后受新file对象控制，文件与老File对象无关
		System.out.println("改后："+f3.getAbsolutePath());
		System.out.println(f3.getName());
		//用老File对象可以重新创建文件吗?
		
		/*创建新目录
		 * */
		File f目录 = new File("D:\\1\\2\\3");
//		f目录.mkdir();//用File对象创建新目录。如果已有该目录，无覆盖。创建后目录与file对象建立映射
		//如果所建子目录其路径名中，有父目录不存在，将不能建立子目录
		f目录.mkdirs();
		
		/*打开已有目录
		 * */
		File fileOpen = new File("D:\\1\\2\\3");//必须使用已有目录的pathname
		/*目录操作。前提 条件：必须先建立映射。
		 * */
		System.out.println("canRead : "+fileOpen.canRead());
		System.out.println("canWrite: "+fileOpen.canWrite());
		System.out.println("isFile: "+fileOpen.isFile());
		System.out.println("isHidden: "+fileOpen.isHidden());
//		System.out.println("delete 2:"+fileOpen.delete());
		/*这个纯属闲着没事，证明：德是什么。
		 * 一：由于德是一个德，德属于物质，
		 * */
		File file3 = new File("D:\\1\\2\\4");
		System.out.println(fileOpen.renameTo(file3));
//		File file4 = new File("D:\\1\\2\\1");
//		System.out.println(fileOpen.renameTo(file3));
		
		//可否将文件改名到新盘符，新目录下德新文件名
		//可以，将文件拷贝进去
		File fileTxt = new File("c:\\bb.txt");
		try {
			fileTxt.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		File fileTxtTo = new File("D:\\1\\ab.txt");
		System.out.println("c-->d: "+fileTxt.renameTo(fileTxtTo));
		
		File fi = new File("c:\\a\\b");
		fi.mkdirs();
		File fi2 = new File("D:\\1");
		System.out.println("fi-->fi2: "+fi.renameTo(fi2));
		
		//目录不可以改名到新盘符：
		//可以该区同盘下德已有父目录下德新子目录
	}

}
